package algorithm

import (
	"math"
	"strconv"
)

/*
原题：https://leetcode-cn.com/problems/reverse-integer/
7. 整数反转
给出一个 32 位的有符号整数，你需要将这个整数中每位上的数字进行反转。

示例 1:

输入: 123
输出: 321
 示例 2:

输入: -123
输出: -321
示例 3:

输入: 120
输出: 21
注意:

假设我们的环境只能存储得下 32 位的有符号整数，则其数值范围为 [−231,  231 − 1]。
请根据这个假设，如果反转后整数溢出那么就返回 0。

分析：
主要关注越界问题，不同的语言，范围不一样，需要自己强加判断
*/

func reverse(x int) int {
	if x <= int(math.Pow(-2, float64(31))) || x > int(math.Pow(2, float64(31))-1) {
		return 0
	}
	flag := true
	if x < 0 {
		flag = false
		x = (-1) * x
	}
	xS := strconv.Itoa(x)
	xRev := make([]byte, len(xS))
	for i := 0; i < len(xS); i++ {
		xRev[i] = xS[len(xS)-1-i]
	}
	x, _ = strconv.Atoi(string(xRev))
	if x <= int(math.Pow(-2, float64(31))) || x > int(math.Pow(2, float64(31))-1) {
		return 0
	}
	if flag == false {
		return (-1) * x
	}
	return x
}
